﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EntityLayer;
using DataLayer.EF;
using System.Data.SqlClient;
namespace DataLayer.CLASES_DAO
{
    public class clsTB_TransferenciaDAO
    {
        private BD_TRASNFINTEREntities ContextoDeObjs = new BD_TRASNFINTEREntities();

        
    //private static BD_TRASNFINTEREntities ContextoDeObjs = null;

    //private clsTB_TransferenciaDAO()
    //{
    //}

    //public static BD_TRASNFINTEREntities GetInstance()
    //{
    //    return ContextoDeObjs ?? (ContextoDeObjs = new BD_TRASNFINTEREntities());
    //}
        public bool Insertar(TB_Transferencia Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("TB_Transferencia", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }


     
        public bool Modificar(TB_Transferencia obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("TB_Transferencia", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception ex)
            {

                return false;
                throw ex;

            }
            return true;
        }
        public bool Eliminar(TB_Transferencia obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("TB_Transferencia", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
        public List<TB_Transferencia> listar()
        {

            List<TB_Transferencia> lista = new List<TB_Transferencia>();
            try
            {
                var q = from c in ContextoDeObjs.TB_Transferencia
                        select c;
                lista = q.ToList();

            }
            catch (Exception)
            {
            }
            return lista;
        }

        public string ObtenerNroOpercionMax()
        {
            long id_opcion = 0;
            string cod;

            try
            {
                var q = (from c in ContextoDeObjs.TB_Transferencia
                         select c.nroOperacion).DefaultIfEmpty("000000").Max();

                id_opcion = Convert.ToInt32(Right(q, 5)) + 1;
                cod = "0000000000" + id_opcion;
                cod = "D" + Right(cod, 5);
                return cod;
            }
            catch (Exception ex)
            {
                return "";
            }
        }
        public string ObtenerNroOpercionMaxC()
        {
            long id_opcion = 0;
            string cod;

            try
            {
                var q = (from c in ContextoDeObjs.TB_Transferencia
                         where c.nroOperacion.Contains("C")
                         select c.nroOperacion).DefaultIfEmpty("000000").Max();

                id_opcion = Convert.ToInt32(Right(q, 5)) + 1;
                cod = "0000000000" + id_opcion;
                cod = "C" + Right(cod, 5);
                return cod;
            }
            catch (Exception ex)
            {
                return "";
            }
        }
        public static string Right(string param, int length)
        {

            int value = param.Length - length;
            string result = param.Substring(value, length);
            return result;
        }

        public IEnumerable<Object> listarResponsable()
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         && t.estado != "AUTORIZADA"
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = t.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> listarResponsableCoordinador()
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         && t.estado != "AUTORIZADA" && t.nroOperacion.Contains("C")
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = t.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> listarTransaccionesIngresadas()
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         where t.idcCliente == c.idcCliente
                         && t.estado == "INGRESADAS" && t.nroOperacion.Contains("D")
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = t.idcCliente,
                             matriculaOperador = t.matriculaOperador
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> listarResponsableNro()
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from tt in ContextoDeObjs.TB_Transferencia
                        from tob in ContextoDeObjs.TB_Operador
                        where
                          tt.TB_Operador.matriculaOperador == tob.matriculaOperador
                        group tob by new
                        {
                            tob.nomOperador
                        } into g
                        select new
                        {
                            nomOperador = g.Key.nomOperador,
                            NroOperaciones = (Int64?)g.Count()
                        };
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }

        public bool actualizarOperador(string nroOperacion, string codigoCorresponsal, string idcCliente, string matriculaOperador, int estado)
        {
            string des_estado = "";
            if (estado==1)
            {
                des_estado = "ASIGNADAS";
            }
            else if (estado==2)
            {
                
            }
            try
            {
                ContextoDeObjs.CommandTimeout = 600;
                ContextoDeObjs.ExecuteStoreCommand("update TB_Transferencia set matriculaOperador='" + matriculaOperador + "',estado='"+des_estado+"' where nroOperacion='" + nroOperacion + "' and codigoCorresponsal='" + codigoCorresponsal + "' and idcCliente='" + idcCliente + "'");
                return true;

            }
            catch (SqlException ex)
            {
                Globales.msjSql = ex.Message;
                return false;

            }
        }
        public IEnumerable<Object> FiltroResponsable(string idResponsable)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         //&& a.matriculaOperador==idResponsable
                         && t.estado != "AUTORIZADA" 
                         && t.estado!="VERIFICADA"
                           && t.estado != "MODIFICAR"
                         && t.estado != "MODIFICADA"
                         && t.estado!="OFAC"
                         && t.estado!="DUPLICADA"
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = c.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador,
                             estado= t.estado,
                             fecValor = t.fecValor,
                             detallePago=t.detallePago
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {
            }
            return lista;
        }


     
        public IEnumerable<Object> FiltroResponsableAutorizar(string idResponsable)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         //&& a.matriculaOperador == idResponsable
                         //&& t.estado != "AUTORIZADA"
                         && t.estado == "VERIFICADA"
                         && t.monto>10000
                         //&& t.estado == "CONFIRMAR"
                         //&& t.estado == "CONFIRMAR"
                         //&& t.estado!="VERIFICADA"
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = c.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador,
                             estado = t.estado,
                             fecValor = t.fecValor,
                             detallePago = t.detallePago
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> FiltroResponsableXMayor(string idResponsable)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         //&& a.matriculaOperador == idResponsable
                         //&& t.estado != "AUTORIZADA" && t.estado != "VERIFICADA" 
                         //&& t.estado=="MODIFICAR"
                             //&& a.matriculaOperador == idResponsable && t.estado != "VERIFICADA"  && t.estado=="MODIFICAR"
                         && t.estado != "AUTORIZADA" && t.estado == "MODIFICADA" 
                         //&& t.estado == "VERIFICADA"
                         && t.monto>=10000
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = c.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador,
                             estado = t.estado,
                             fecValor = t.fecValor,
                             detallePago = t.detallePago
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> FiltroResponsableXMenor(string idResponsable)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         && a.matriculaOperador == idResponsable
                         && t.estado != "AUTORIZADA" && t.estado != "VERIFICADA" && t.monto < 10000
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = c.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador,
                             estado = t.estado,
                             fecValor = t.fecValor,
                             detallePago = t.detallePago
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }
        public IEnumerable<Object> FiltroResponsableXMayorModificar(string idResponsable)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = (from t in ContextoDeObjs.TB_Transferencia
                         from c in ContextoDeObjs.TB_Cliente
                         from a in ContextoDeObjs.TB_Operador
                         where t.idcCliente == c.idcCliente
                         && a.matriculaOperador == t.matriculaOperador
                         //&& a.matriculaOperador == idResponsable
                         && t.estado != "AUTORIZADA" 
                         && t.estado != "INGRESADAS"
                         && t.estado != "ASIGNADAS"
                         && t.estado != "MODIFICADA"
                          && t.monto >= 10000
                         select new
                         {
                             nroOperacion = t.nroOperacion,
                             moneda = t.moneda,
                             monto = t.monto,
                             nomcliente = c.nomCliente,
                             codigoCorresponsal = t.codigoCorresponsal,
                             idcCliente = c.idcCliente,
                             matriculaOperador = t.matriculaOperador,
                             nomOperador = a.nomOperador,
                             estado = t.estado,
                             fecValor = t.fecValor,
                             detallePago = t.detallePago
                         }).OrderBy(c => c.nroOperacion);
                lista = q.ToList();
            }
            catch (Exception)
            {

                throw;
            }
            return lista;
        }

        public List<Globales.lista_TransferenciaReponsable> listaVerificacion(string nroOperacion)
        {
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            try
            {
                var q = from t in ContextoDeObjs.TB_Transferencia 
                        from tob in ContextoDeObjs.TB_Operador
                        from tc in ContextoDeObjs.TB_Cliente
                        from ts in ContextoDeObjs.TB_Supervisor
                        join tbs in ContextoDeObjs.TB_Beneficiario.DefaultIfEmpty() on t.cuentaBeneficiario equals tbs.cuentaBeneficiario 
                        where
                          t.TB_Cliente.idcCliente == tc.idcCliente &&
                          tob.matriculaOperador == t.TB_Operador.matriculaOperador &&
                          ts.matriculaSupervisor == tob.TB_Supervisor.matriculaSupervisor &&
                          t.nroOperacion == nroOperacion
                        //&&
                        //t.TB_Corresponsal.codigoCorresponsal == codigoCorresponsal &&
                        //t.TB_Cliente.idcCliente == idcCliente &&
                        //t.TB_Operador.matriculaOperador == matriculaOperador
                        select new
                        {
                            nroOperacion = t.nroOperacion,
                            moneda = t.moneda,
                            monto = t.monto,
                            nomCliente = tc.nomCliente,
                            nomOperador = tob.nomOperador,
                            matriculaOperador = tob.matriculaOperador,
                            matriculaSupervisor = ts.matriculaSupervisor,
                            idcCliente = t.TB_Cliente.idcCliente,
                            codigoCorresponsal = t.TB_Corresponsal.codigoCorresponsal,
                            nomSupervisor = ts.nomSupervisor,
                            codBcoIntermediario = (t.codBcoIntermediario ?? ""),
                            codigoBcoDestino = t.TB_BcoDestino.codigoBcoDestino,
                            cuentaBeneficiario = t.TB_Beneficiario.cuentaBeneficiario,
                            tipoCargo = t.tipoCargo,
                            detallePago = t.detallePago,
                            infBcoBco = t.infBcoBco,
                            observaciones = t.observaciones,
                            fecValor = t.fecValor,
                            nomBeneficiario = tbs.nomBeneficiario,
                            dirBeneficiario = tbs.dirBeneficiario,
                            estado = t.estado,
                            telefonoCliente = tc.telefonoCliente,
                            fecCreacion = t.fecCreacion
                        };

                Globales.lista_TransferenciaReponsable item = new Globales.lista_TransferenciaReponsable();
                foreach (var s in q.AsEnumerable())
                {
                    item.codBcoIntermediario = s.codBcoIntermediario;
                    item.codigoBcoDestino = s.codigoBcoDestino;
                    item.codigoCorresponsal = s.codigoCorresponsal;
                    item.cuentaBeneficiario = s.cuentaBeneficiario;
                    item.detallePago = s.detallePago;
                    item.fecValor = s.fecValor;
                    item.idcCliente = s.idcCliente;
                    item.infBcoBco = s.infBcoBco;
                    item.matriculaOperador = s.matriculaOperador;
                    item.matriculaSupervisor = s.matriculaSupervisor;
                    item.moneda = s.moneda;
                    item.monto = s.monto;
                    item.nomCliente = s.nomCliente;
                    item.nomOperador = s.nomOperador;
                    item.nomSupervisor = s.nomSupervisor;
                    item.nroOperacion = s.nroOperacion;
                    item.observaciones = s.observaciones;
                    item.tipoCargo = s.tipoCargo;
                    item.nomBeneficiario = s.nomBeneficiario;
                    item.dirBeneficiario = s.dirBeneficiario;
                    item.estado = s.estado;
                    item.telefonoCliente = s.telefonoCliente;
                    item.fecValor = s.fecValor;
                    item.fecCreacion = s.fecCreacion;
                    lista.Add(item);
                }

            }
            catch (Exception ex)
            {
                lista = null;
                throw ex;
            }
            return lista;
        }
        public List<Globales.lista_TransferenciaReponsable> listaVerificacionC(string nroOperacion)
        {
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            try
            {
                var q = from t in ContextoDeObjs.TB_Transferencia
                        from tob in ContextoDeObjs.TB_Operador
                        from tc in ContextoDeObjs.TB_Cliente
                        from ts in ContextoDeObjs.TB_Supervisor
                        
                        where
                          t.TB_Cliente.idcCliente == tc.idcCliente &&
                          tob.matriculaOperador == t.TB_Operador.matriculaOperador &&
                          ts.matriculaSupervisor == tob.TB_Supervisor.matriculaSupervisor &&
                          t.nroOperacion == nroOperacion
                        //&&
                        //t.TB_Corresponsal.codigoCorresponsal == codigoCorresponsal &&
                        //t.TB_Cliente.idcCliente == idcCliente &&
                        //t.TB_Operador.matriculaOperador == matriculaOperador
                        select new
                        {
                            nroOperacion = t.nroOperacion,
                            moneda = t.moneda,
                            monto = t.monto,
                            nomCliente = tc.nomCliente,
                            nomOperador = tob.nomOperador,
                            matriculaOperador = tob.matriculaOperador,
                            matriculaSupervisor = ts.matriculaSupervisor,
                            idcCliente = t.TB_Cliente.idcCliente,
                            codigoCorresponsal = t.TB_Corresponsal.codigoCorresponsal,
                            nomSupervisor = ts.nomSupervisor,
                            codBcoIntermediario = (t.codBcoIntermediario ?? ""),
                            codigoBcoDestino = t.TB_BcoDestino.codigoBcoDestino,
                            cuentaBeneficiario = t.TB_Beneficiario.cuentaBeneficiario,
                            tipoCargo = t.tipoCargo,
                            detallePago = t.detallePago,
                            infBcoBco = t.infBcoBco,
                            observaciones = t.observaciones,
                            fecValor = t.fecValor,
                            estado = t.estado,
                            telefonoCliente = tc.telefonoCliente,
                            fecCreacion = t.fecCreacion
                        };

                Globales.lista_TransferenciaReponsable item = new Globales.lista_TransferenciaReponsable();
                foreach (var s in q.AsEnumerable())
                {
                    item.codBcoIntermediario = s.codBcoIntermediario;
                    item.codigoBcoDestino = s.codigoBcoDestino;
                    item.codigoCorresponsal = s.codigoCorresponsal;
                    item.cuentaBeneficiario = s.cuentaBeneficiario;
                    item.detallePago = s.detallePago;
                    item.fecValor = s.fecValor;
                    item.idcCliente = s.idcCliente;
                    item.infBcoBco = s.infBcoBco;
                    item.matriculaOperador = s.matriculaOperador;
                    item.matriculaSupervisor = s.matriculaSupervisor;
                    item.moneda = s.moneda;
                    item.monto = s.monto;
                    item.nomCliente = s.nomCliente;
                    item.nomOperador = s.nomOperador;
                    item.nomSupervisor = s.nomSupervisor;
                    item.nroOperacion = s.nroOperacion;
                    item.observaciones = s.observaciones;
                    item.tipoCargo = s.tipoCargo;
                    item.estado = s.estado;
                    item.telefonoCliente = s.telefonoCliente;
                    item.fecValor = s.fecValor;
                    item.fecCreacion = s.fecCreacion;
                    lista.Add(item);
                }

            }
            catch (Exception ex)
            {
                lista = null;
                throw ex;
            }
            return lista;
        }
        public List<Globales.lista_TransferenciaReponsable> listaVerificacionA(string nroOperacion){
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            try
            {
                var q = from t in ContextoDeObjs.TB_Transferencia
                        from tc in ContextoDeObjs.TB_Cliente
                        where
                          t.TB_Cliente.idcCliente == tc.idcCliente &&
                          t.nroOperacion == nroOperacion
                          //&&
                          //t.TB_Corresponsal.codigoCorresponsal == codigoCorresponsal &&
                          //t.TB_Cliente.idcCliente == idcCliente &&
                          //t.TB_Operador.matriculaOperador == matriculaOperador
                        select new
                        {
                            nroOperacion=t.nroOperacion,
                            moneda=t.moneda,
                            monto=t.monto,
                            nomCliente= tc.nomCliente,
                            idcCliente = t.TB_Cliente.idcCliente,
                            codigoCorresponsal = t.TB_Corresponsal.codigoCorresponsal,
                            codBcoIntermediario = (t.codBcoIntermediario ?? ""),
                            codigoBcoDestino = t.TB_BcoDestino.codigoBcoDestino,
                            cuentaBeneficiario = t.TB_Beneficiario.cuentaBeneficiario,
                            tipoCargo=t.tipoCargo,
                            detallePago=t.detallePago,
                            infBcoBco = t.infBcoBco,
                            observaciones=t.observaciones,
                            fecValor=t.fecValor,
                            estado=t.estado,
                            telefonoCliente = tc.telefonoCliente,
                            fecCreacion=t.fecCreacion
                        };

                Globales.lista_TransferenciaReponsable item = new Globales.lista_TransferenciaReponsable();
                foreach (var s in q)
                {
                    item.codBcoIntermediario = s.codBcoIntermediario;
                    item.codigoBcoDestino = s.codigoBcoDestino;
                    item.codigoCorresponsal = s.codigoCorresponsal;
                    item.cuentaBeneficiario = s.cuentaBeneficiario;
                    item.detallePago = s.detallePago;
                    item.fecValor = s.fecValor;
                    item.idcCliente = s.idcCliente;
                    item.infBcoBco = s.infBcoBco;
                    item.moneda = s.moneda;
                    item.monto = s.monto;
                    item.nomCliente = s.nomCliente;
                    item.nroOperacion = s.nroOperacion;
                    item.observaciones = s.observaciones;
                    item.tipoCargo = s.tipoCargo;
                    item.estado = s.estado;
                    item.telefonoCliente = s.telefonoCliente;
                    item.fecValor = s.fecValor;
                    item.fecCreacion = s.fecCreacion;
                    lista.Add(item);
                }
                
            }
            catch (Exception ex)
            {
                lista = null;
                throw ex;
            }
            return lista;
        }



        public List<Globales.lista_TransferenciaReponsable> listarTransferenciaEstado(string nroOperacion)
        {
            List<Globales.lista_TransferenciaReponsable> lista = new List<Globales.lista_TransferenciaReponsable>();
            try
            {
                var q = from t in ContextoDeObjs.TB_Transferencia
                        from tob in ContextoDeObjs.TB_Operador
                        from tc in ContextoDeObjs.TB_Cliente
                        from ts in ContextoDeObjs.TB_Supervisor
                        from tb in ContextoDeObjs.TB_Beneficiario
                        where
                          t.TB_Cliente.idcCliente == tc.idcCliente &&
                          tob.matriculaOperador == t.TB_Operador.matriculaOperador &&
                          ts.matriculaSupervisor == tob.TB_Supervisor.matriculaSupervisor &&
                          tb.cuentaBeneficiario == t.cuentaBeneficiario &&
                          t.nroOperacion == nroOperacion 
                          //&& t.estado == "AUTORIZADA"
                      
                        select new
                        {
                            nroOperacion = t.nroOperacion,
                            moneda = t.moneda,
                            monto = t.monto,
                            nomCliente = tc.nomCliente,
                            nomOperador = tob.nomOperador,
                            matriculaOperador = tob.matriculaOperador,
                            matriculaSupervisor = ts.matriculaSupervisor,
                            idcCliente = t.TB_Cliente.idcCliente,
                            codigoCorresponsal = t.TB_Corresponsal.codigoCorresponsal,
                            nomSupervisor = ts.nomSupervisor,
                            codBcoIntermediario = (t.codBcoIntermediario ?? ""),
                            codBcoIntermediario1 = (t.codBcoIntermediario1 ?? ""),
                            codBcoIntermediario2 = (t.codBcoIntermediario2 ?? ""),
                            codigoBcoDestino = t.TB_BcoDestino.codigoBcoDestino,
                            cuentaBeneficiario = t.TB_Beneficiario.cuentaBeneficiario,
                            tipoCargo = t.tipoCargo,
                            detallePago = t.detallePago,
                            infBcoBco = t.infBcoBco,
                            observaciones = t.observaciones,
                            fecValor = t.fecValor,
                            nomBeneficiario = tb.nomBeneficiario,
                            dirBeneficiario = tb.dirBeneficiario,
                            estado=t.estado,
                            dirCliente = tc.dirCliente
                            

                        };

                Globales.lista_TransferenciaReponsable item = new Globales.lista_TransferenciaReponsable();
                foreach (var s in q)
                {
                    item.codBcoIntermediario = s.codBcoIntermediario;
                    item.codigoBcoDestino = s.codigoBcoDestino;
                    item.codigoCorresponsal = s.codigoCorresponsal;
                    item.cuentaBeneficiario = s.cuentaBeneficiario;
                    item.detallePago = s.detallePago;
                    item.fecValor = s.fecValor;
                    item.idcCliente = s.idcCliente;
                    item.infBcoBco = s.infBcoBco;
                    item.matriculaOperador = s.matriculaOperador;
                    item.matriculaSupervisor = s.matriculaSupervisor;
                    item.moneda = s.moneda;
                    item.monto = s.monto;
                    item.nomCliente = s.nomCliente;
                    item.nomOperador = s.nomOperador;
                    item.nomSupervisor = s.nomSupervisor;
                    item.nroOperacion = s.nroOperacion;
                    item.observaciones = s.observaciones;
                    item.tipoCargo = s.tipoCargo;
                    item.nomBeneficiario = s.nomBeneficiario;
                    item.dirBeneficiario = s.dirBeneficiario;
                    item.estado = s.estado;
                    item.dirCliente = s.dirCliente;
                    item.codBcoIntermediario1 = s.codBcoIntermediario1;
                    item.codBcoIntermediario2 = s.codBcoIntermediario2;
                    lista.Add(item);
                }

            }
            catch (Exception ex)
            {
                lista = null;
                throw ex;
            }
            return lista;
        }


        public bool actualizarEstado(string nroOperacion,string estado,string idOfac)
        {
            
            try
            {
                if (idOfac == null)
                {

                    ContextoDeObjs.CommandTimeout = 600;

                    ContextoDeObjs.ExecuteStoreCommand("update TB_Transferencia set estado='" + estado + "' where nroOperacion='" + nroOperacion + "'");
                    return true;


                }
                else {

                    ContextoDeObjs.CommandTimeout = 600;

                    ContextoDeObjs.ExecuteStoreCommand("update TB_Transferencia set estado='" + estado + "',codigoOFAC='" + idOfac + "' where nroOperacion='" + nroOperacion + "'");
                    return true;
                
                }
               

            }
            catch (SqlException ex)
            {
                Globales.msjSql = ex.Message;
                return false;

            }
        }


        public IEnumerable<Object> listarDuplicados(DateTime fechaactual, DateTime fechaayer)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from t1 in ContextoDeObjs.TB_Transferencia
                        from t2 in ContextoDeObjs.TB_Transferencia
                        where
                          t1.TB_Cliente.idcCliente == t2.TB_Cliente.idcCliente &&
                          t1.moneda == t2.moneda &&
                          t1.TB_Beneficiario.cuentaBeneficiario == t2.TB_Beneficiario.cuentaBeneficiario &&
                          t1.TB_BcoDestino.codigoBcoDestino == t2.TB_BcoDestino.codigoBcoDestino &&
                          t1.fecCreacion == fechaayer &&
                          t2.fecCreacion == fechaactual
                        select new
                        {
                            nroOperacion1 = t1.nroOperacion,
                            t1.moneda,
                            t1.monto,
                            nroOperacion2 = t2.nroOperacion
                        };
                lista = q.ToList();
            }
            catch (Exception)
            {
                lista = null;
            }
            return lista;
        }


        public IEnumerable<ListaTransferenciasDuplicadas> ListarTransferenciasDuplicadas()
        {
            try
            {
                var resultado = ContextoDeObjs.ExecuteStoreQuery<ListaTransferenciasDuplicadas>("EXEC SP_LISTAR_TRANSFERNCIA_DUPLICADAS").AsQueryable().ToList();
                return resultado;
            }
            catch (Exception ex)
            {

                return null;
            }
            
        }

        public IEnumerable<listaReporte> BuscarTransferencias(string sql)
        {
            try
            {
                var resultado = ContextoDeObjs.ExecuteStoreQuery<listaReporte>(sql).AsQueryable().ToList();
                return resultado;
            }
            catch (Exception ex)
            {
                return null;
            }
      
        }

        public IEnumerable<Object> listarTransferenciaOFAC()
        {
            IEnumerable<Object> listaOFAC = new List<Object>();
            try
            {
                var q = from tbo in ContextoDeObjs.TB_ListaOfac
                        from tbt in ContextoDeObjs.TB_Transferencia
                        where
                          tbo.codigoOFAC == tbt.TB_ListaOfac.codigoOFAC
                          //&& tbt.estado != "AUTORIZADA"
                          && tbt.estado=="OFAC"
                        select new
                        {
                            tbt.nroOperacion,
                            tbt.codigoCorresponsal,
                            tbt.cuentaBeneficiario,
                            tbt.codigoBcoDestino,
                            tbt.estado,
                            tbt.fecValor,
                            tbt.moneda,
                            tbt.monto,
                            tbo.codigoOFAC,
                            tbo.descripcionOFAC,
                            tbt.detallePago,
                            idcCliente = tbt.TB_Cliente.idcCliente
                        };
                listaOFAC = q.ToList();
            }
            catch (Exception)
            {

                return listaOFAC = null;
            }
            return listaOFAC;
        }

        public List<OFA_EN> ListarOFac(string filtro)
        {
            try
            {
                 var p = new object[] { new SqlParameter("@filtro", filtro) };
                 var resultado = ContextoDeObjs.ExecuteStoreQuery<OFA_EN>("exec SP_GET_OFAC @filtro", p).AsQueryable().ToList(); 
            
                
                return resultado;
            }
            catch (Exception ex )
            {
                return null;
            }
        }

        public IEnumerable<Object> listarCuentaCuentaClientesActivas()
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from tc in ContextoDeObjs.TB_Cliente
                        from tcl in ContextoDeObjs.TB_Cuenta_Cliente
                        where
                          tc.idcCliente == tcl.TB_Cliente.idcCliente &&
                          tcl.estadoCuenta == "ABIERTA"
                        select new
                        {
                            tc.idcCliente,
                            tc.dirCliente,
                            tc.funcionarioCliente,
                            tc.mailCliente,
                            tc.nomCliente,
                            tc.telefonoCliente,
                            tcl.estadoCuenta,
                            tcl.nroCuenta,
                            tcl.saldoCuenta
                        };

                lista = q.ToList();
            }
            catch (Exception)
            {
                lista = null;
                
            }
            return lista;
        }

        public IEnumerable<Object> listarCuentaCuentaClientesActivas(string idcCliente)
        {
            IEnumerable<Object> lista = new List<Object>();
            try
            {
                var q = from tc in ContextoDeObjs.TB_Cliente
                        from tcl in ContextoDeObjs.TB_Cuenta_Cliente
                        where 
                          tc.idcCliente == tcl.TB_Cliente.idcCliente &&
                          tcl.estadoCuenta == "ABIERTA" &&
                          tc.nomCliente.Contains(idcCliente)
                        select new
                        {
                            tc.idcCliente,
                            tc.dirCliente,
                            tc.funcionarioCliente,
                            tc.mailCliente,
                            tc.nomCliente,
                            tc.telefonoCliente,
                            tcl.estadoCuenta,
                            tcl.nroCuenta,
                            tcl.saldoCuenta
                        };

                //var q = (from tc in ContextoDeObjs.TB_Cliente
                //         from tcl in ContextoDeObjs.TB_Cuenta_Cliente
                //         where
                //           tc.idcCliente == tcl.TB_Cliente.idcCliente &&
                //           tcl.estadoCuenta == "ABIERTA" &&
                //         select new
                //         {
                //             tc.idcCliente,
                //             tc.dirCliente,
                //             tc.funcionarioCliente,
                //             tc.mailCliente,
                //             tc.nomCliente,
                //             tc.telefonoCliente,
                //             tcl.estadoCuenta,
                //             tcl.nroCuenta,
                //             tcl.saldoCuenta
                //         }).Where(x => x.nomCliente.Contains(idcCliente));

                lista = q.ToList();
            }
            catch (Exception)
            {
                lista = null;

            }
            return lista;
        }

        /* Actualizacion de cuentas */

        public List<TB_Corresponsal> ListarCuentaAbono(string codcorres) {

            List<TB_Corresponsal> lista = new List<TB_Corresponsal>();
            try {
                var q = from c in ContextoDeObjs.TB_Corresponsal
                        where c.codigoCorresponsal == codcorres
                        select c;
                lista = q.ToList();
                return lista;
            }
            catch {
                return lista;

            }
        }
        public List<TB_Cuenta_Cliente> ListarCuentaCliente(string nrocuenta)
        {
            List<TB_Cuenta_Cliente> lista = new List<TB_Cuenta_Cliente>();
            try
            {
                var q = from c in ContextoDeObjs.TB_Cuenta_Cliente
                        where c.nroCuenta == nrocuenta
                        select c;
                lista = q.ToList();
                return lista;
            }
            catch
            {
                return lista;

            }
        }
        public bool InsertarCuentas(TB_CuentasAfectadas Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("TB_CuentasAfectadas", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
  
       
    }
}
